home *** CD-ROM | disk | FTP | other *** search
- rmcode segment word public use16
- rmcode ends
- rmdata segment dword public 'DATA' use16
- rmdata ends
- pmdata segment dword public 'DATA' use32
- pmdata ends
- pmcode segment dword public 'CODE' use32
- pmcode ends
- DGROUP group rmdata,pmdata
-
- CONBIOS equ 29h
- STACK_SIZE equ (8*1024) ; !!! Check of Size !!!
-
- extrn cons_bios:near ; Consol Bios "C" Funcsion
-
- ;**********************************************
- ;
- ; Real Mode Data Segment defs
- ;
- ;**********************************************
- rmdata segment
- rmdata ends
-
- ;**********************************************
- ;
- ; Real Mode Code Segment Funcsion
- ;
- ;**********************************************
- rmcode segment word public use16
- assume cs:rmcode,ds:DGROUP
-
- in_dos_call proc far
-
- mov ah,34h
- int 21h
- mov ax,es
- ret
-
- in_dos_call endp
-
- rmcode ends
-
- ;**********************************************
- ;
- ; Protect Mode Data Segment defs
- ;
- ;**********************************************
- pmdata segment
-
- nt_vet_off dd ? ; offset +
- nt_vet_seg dw ? ; segment = pword !!
- rl_vet_ral dd ?
-
- save_esp dd ? ; offset +
- save_ss dw ? ; segment = pword !!
-
- stack_flg dw 0 ; stack access flg
-
- new_esp dd ? ; offset +
- new_ss dw ? ; segment = pword !!
-
- public in_dos_adr
- in_dos_adr dd 0 ; in dos flg in MS-DOS 1M Selecter
-
- consol_path db "CON",0
- null_path db "NUL",0
-
- align 4 ; align set
- local_stack db STACK_SIZE dup(?) ; local stack era
- local_stack_btm dw ? ; dummy
-
- pmdata ends
-
- ;**********************************************
- ;
- ; Protect Mode Code Segment Funcsion
- ;
- ;**********************************************
- pmcode segment
- assume cs:pmcode,ds:DGROUP
-
- ;***************************************************
- ; Consol Bios Old Vectror ReSet
- ;
- ;void cons_bios_ret(void)
- ;
- ;call to void cons_bios(struct reg *rp)
- ;***************************************************
- cons_bios_entry proc far
- cmp stack_flg,0
- jne short go_ret
- inc stack_flg
-
- mov save_esp,esp ; save ss:esp
- mov save_ss,ss
- lss esp,pword ptr new_esp ; Load Loacl Stack Address
- pushad
-
- sti
- cld
-
- push ds
- pop es
- mov ebp,esp
- push ebp
- call cons_bios
- add esp,4
-
- popad
- lss esp,pword ptr save_esp
-
- dec stack_flg
- go_ret: iretd
-
- cons_bios_entry endp
-
- ;************************************
- ; File I/O ReDirect Asm Call onry!
- ;************************************
- reopen proc near
- push ax
- mov ah,3Eh ; close
- int 21h
- pop ax
- mov ah,3Dh ; open file
- int 21h
- reo_ret:ret
-
- reopen endp
-
- ;***************************************************
- ; Consol Bios Entry SetUp
- ;
- ;void cons_bios_set(void)
- ;***************************************************
- public cons_bios_set
- cons_bios_set proc near
-
- push ds
- push es
- push ebx
- push edx
-
- mov ax,2502h ; get neitive int vect
- mov cl,CONBIOS
- int 21h
- mov nt_vet_seg,es
- mov nt_vet_off,ebx
-
- mov ax,2503h
- mov cl,CONBIOS
- int 21h
- mov rl_vet_ral,ebx
-
- mov ax,2506h
- mov cl,CONBIOS
- push ds
- mov dx,cs
- mov ds,dx
- lea edx,cons_bios_entry
- int 21h
- pop ds
-
- mov new_ss,ds
- lea ebx,local_stack_btm
- mov new_esp,ebx
-
- mov al,0
- mov bx,0
- lea edx,consol_path
- call reopen
- mov al,1
- mov bx,1
- call reopen
- mov al,1
- mov bx,2
- call reopen
-
- pop edx
- pop ebx
- pop es
- pop ds
- ret
-
- cons_bios_set endp
-
- ;***************************************************
- ; Consol Bios Old Vectror ReSet
- ;
- ;void cons_bios_ret(void)
- ;***************************************************
- public cons_bios_ret
- cons_bios_ret proc near
-
- push ds
- push ebx
- push edx
-
- mov cl,CONBIOS
- mov ebx,rl_vet_ral
- mov edx,nt_vet_off
- mov ax,nt_vet_seg
- push ds
- mov ds,ax
- mov ax,2507h
- int 21h
- pop ds
-
- mov al,0
- mov bx,0
- lea edx,null_path
- call reopen
- mov al,1
- mov bx,1
- call reopen
- mov al,1
- mov bx,2
- call reopen
-
- pop edx
- pop ebx
- pop ds
- ret
-
- cons_bios_ret endp
-
- ;***************************************************
- ; MS-DOS Funcsion Call Check!
- ;
- ;ont in_dos_check(void)
- ;***************************************************
- public in_dos_check
- in_dos_check proc near
- push ds
- push edi
-
- cmp in_dos_adr,0
- jne indos1
-
- pushad
- push ds
- push es
-
- mov ax,250Fh
- push ds
- pop es
- lea ebx,in_dos_call
- mov ecx,0
- int 21h
-
- mov ax,250Eh
- mov ebx,ecx ; real address
- mov ecx,0 ; stack data = 0
- int 21h
-
- pop es
- pop ds
- movzx eax,ax
- shl eax,4
- movzx ebx,bx
- add eax,ebx ; seg >> 4 | off
- mov in_dos_adr,eax
- popad
-
- indos1: mov edi,in_dos_adr
- mov ax,0060h ; MS-DOS 1M Real Selecter
- mov ds,ax
- movzx eax,byte ptr [edi]
- pop edi
- pop ds
- ret
-
- in_dos_check endp
-
- pmcode ends
-
- end